Search


📜 [專欄新文章] Solidity Weekly #7
✍️ mingde...

  • Share this:


📜 [專欄新文章] Solidity Weekly #7
✍️ mingderwang
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium

怎麼用 revert, require, assert 才對?

由於 solidity 還在不斷的演進,有些文法或保留字,慢慢的淘汰,改用其他比較好的方法來寫。

最早我們會用 throw 保留字, 來跳開不接受的程式判斷如下:

if(msg.sender != owner) { throw; }

現在, 官方建議改用

if(msg.sender != owner) { revert("不是 Owner 本人"); }

或乾脆直接用 require 來做判斷與錯誤訊息顯示如下:

require(msg.sender == owner, "不是 Owner 本人")

雖然也可以用 assert 如下,但最好不要這樣用。原因 1. assert 會把所有 gas 用完,require 或 revert 會把沒用完的 gas 還給你。2. assert 通常用來做 internal error 的檢查,顧名思義 ASSERT 是用來做程式錯誤發生時警告用的。當它發生或被分析工具找到漏洞,就是 bugs,ㄧ定要修改的 bugs 了。

assert(msg.sender == owner) // 不建議這樣用

最後,又如何判斷用 require 還是 revert ? 很簡單,平常盡量用 require,在判斷邏輯太複雜時,用 revert 比 require 簡單時,才用 revert。

*適用版本 Solidity ^0.4.10 或以上

Solidity Weekly #7 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.

👏 歡迎轉載分享鼓掌


Tags:

About author
not provided
We have regular meeting twice per month on discussing blockchain technology, smart contracts and DApps development! We would love to have you join us!
View all posts